iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
AI & Data

跟著文組生學數據分析系列 第 18

抓取資料庫數據 - SQL基礎語法(下)

  • 分享至 

  • xImage
  •  

我們學會了單張表的查詢與篩選,當資料需要跨表拉取時該怎麼辦呢?這時候我們就需要用到JOIN來把表與表之間合併。

我們先來看下面這張表,這是由C.L. Moffatt 發表的 Visual Representation of SQL Joins一文中解釋何謂JOIN所做的圖示,非常的清楚易懂。今天就讓我們來一一認識這些不同的JOIN用法吧!

https://ithelp.ithome.com.tw/upload/images/20211002/20126080ISXC1AuxFV.png

左、右外連接

首先,先從我們最最最常用的LEFT JOIN開始!

SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
LEFT JOIN Table_B AS B
ON A.Key = B.Key;

我們要使用LEFT JOIN,就需要將兩張表的KEY欄位找出來,也就是在這一篇中『』我們有講到關聯性資料庫的特性之一。

在上述的程式碼中我們也新學到一個用法-AS,其作用就是可以針對表名、欄位名等做重新命名,來方便我們在程式碼的撰寫。

LEFT JOIN又稱為左外連接,也就是針對你原本的A表,將B表有相關的資訊都補充上去,由於是以A表為主,因此B表沒有的就會以Null顯示。而與其相反的就是RIGHT JOIN,以B表為主來查找A表的相關資料。

全連接

小孩子才做選擇,我全都要!想要連接所有的資料,你需要使用的是FULL OUTER JOIN或是FULL JOIN。它會包含兩張表的所有欄位,如有缺少關聯的項目,一樣會用Null顯示。

SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
FULL OUTER JOIN Table_B AS B
ON A.Key = B.Key;

內連接

只想保留資料有交集的那一塊怎麼做?沒錯~使用INNER JOIN!唯有同時滿足A表和B表的資料才會被保留下來。通常在不清楚或不熟悉資料欄位和內容的情況下,使用INNER JOIN已經變相在過濾資料了,因此要特別小心使用!

SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
INNER JOIN Table_B AS B
ON A.Key = B.Key;

上述是最常見的資料關聯方式,如果想要知道更多其他的關聯方法可以參考下方的資料學習。

接下來要進到SQL進階的部分,也就是「子查詢」的運用。

子查詢透過前2天學習的語句,加上今天學習的JOIN,可以產生好多種變化!然後你就會發現你的query越寫越長,邏輯越來越難懂XD逐漸朝向SQL大師的道路邁進~~~

耶~努力成為SQL大師吧!我們明天見!


圖片來源:

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

參考資料:

https://zh.wikipedia.org/wiki/连接

https://www.w3schools.com/sql/sql_join_inner.asp


上一篇
抓取資料庫數據 - SQL基礎語法(中)
下一篇
抓取資料庫數據 - SQL進階語法
系列文
跟著文組生學數據分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言